home *** CD-ROM | disk | FTP | other *** search
- Mike,
-
- I think we did it. The work you did debugging really helped a lot.
-
- Here's what I learned:
-
- The most important part of the code is what you labeled DoSpk.
- Essentially it takes an address where the data begins, and the
- address where the data ends, and one-by-one sends each bit to the
- speaker port, 61h. If the bit is 1, it sends 32h. If the bit is 0
- then it sends 30h. I traced it's progress as it spoke each
- phoneme to learn their addresses.
-
- Each phoneme is exactly 023Fh bytes long, and they are arranged
- in sequence in the data table, in no particular order starting at
- offset $012C. "I" is a special case which is always translated
- into the pair "AH-EE". There is also a mystery "blank" phoneme.
-
- So I wrote my own code for doing about the same thing as DoSpk.
- This is in Talk.ASM. It requires TASM to assemble. It is passed
- the address in memory where you want to start moving data to the
- speaker, and the number of bytes you want processed. If you say
- you want zero bytes, it processes 65536. It uses the value of a
- global variable SpeedDelay to determine how much to slow down.
- Altogether, it seems to be somewhat faster than the code used in
- the original, so perhaps even a 4.77 MHz machine could use a
- small delay. It is called ** FAR **.
-
- Then I copied the data part of Speech.BIN to a file called
- TalkData, and converted that to an object file with BINOBJ.
- You'll have to run "BinObj TalkData.BIN TalkData.OBJ TalkDataLink".
-
- I wrote routines in Pascal for parsing a string of phonemes, and
- determining what values Talk needs.
-
- TalkPhoneme takes just one phoneme and looks up it's address in
- the table. The Turbo Pascal Seg and Ofs functions are used to
- find the data table, and the constant data length, $023F, is hard
- coded.
-
- procedure Speech parses a string for phonemes. I've allowed any
- non-alphabetic character to be used as a seperator.
-
- This is great.
-
- Why don't you try it on your machine with different SpeedDelays
- and see what happens.
-
- For fun, run Talk on any part of memory, your program, the
- operating system, whatever.
-
- I don't think it can be made fast enough to run in the
- background, as I had hoped. It would be alright on a 386 perhaps,
- but not at 4.77 MHz. Hmmm ....
-
- It may be possible to compress the data somewhat. It seems that
- there are often a lot of high bits in a row, followed by a lot of
- low bits in a row. I might examine the possibility of storing
- counts of high and low bits instead.
-
- Have you noticed that NumSpeech's interpretation of "30" sounds a
- lot like "50"?
-
- We could make some improvements in the sounds themselves. For
- example, every time there is a "D" sound, it sounds like "Da".
- Perhaps the Count for this phoneme could be shorter. Replacing
- the samples, though, would require some sampling device of which
- I have none.
-
- Are we a team or what?
-
-
-
- -David-
-
-
-